/*
 * @Author: 一盏青灯欲锁魂
 * @Date: 2021-06-20 08:50:20
 * @LastEditTime: 2021-06-20 09:42:36
 * @Description: 自定义Pipe通道类
 * @FilePath: \nest_demo\src\pipe\custom.pipe.ts
 */
import { Injectable, PipeTransform, ArgumentMetadata, BadRequestException } from '@nestjs/common';

/*
    * Pipe通道定义步骤：
    *   1. 引入 Injectable, PipeTransform, ArgumentMetadata, BadRequestException
    *   2. 通过实现PipeTransform接口来自定义Pipe通道，PipeTransform可以指定泛型来约束该通道只能接受的数据类型
    *   3. 通过BadRequestException抛出错误
    *   4. 最后需要把值reutrn出去
    * 
    * 为什么引入Injectable？
    *   1. Pipe通道最终需要注入到Nest中才能使用
    * 
    * 为什么引入PipeTransform？
    *   1. PipeTransform是Nest提供的自定义Pipe通道接口，自定义Pipe通道必须实现PipeTransform的transform()方法
    *   2. PipeTransform指定泛型可以约束需要处理的数据类型
    * 
    * 为什么引入BadRequestException？
    *   1. Nest暴露出来的错误处理接口，用于处理异常情况
    * 
    * 如何全局使用？
    *   1. main.ts中使用app.useGlobalPipes(new CustomPipe());
*/

@Injectable()
export class CustomPipe implements PipeTransform<string>{
    async transform(value:string, metadata:ArgumentMetadata){
        const val = parseInt(value, 10);
        if(isNaN(val)){
            throw new BadRequestException('参数错误');
        }
        return `自定义Pipe通道类处理后的值：${val}`;
    }
};